rr # Libraries library(ggplot2) library(dplyr) library(forcats) library(ggpubr) library(cowplot)

rr mynamestheme <- theme_bw()+ theme(plot.title = element_text(family = , face = , size = (25)), legend.title = element_text(colour = , face = , family = ,size = (20)), legend.text = element_text(face = , colour=,family = ,size = (18) ), axis.title = element_text(family = , face = ,size = (20), colour = ), axis.text = element_text(family = ,face = , colour = , size = (18)))

rr #P value correction #AZM and Placebo at all visits Aitchison only

pa<-c(0.76, 0.001,0.07) p.adjust(pa, method=, n=length(pa)) #[1] 0.760 0.003 0.140

#P value correction #AZM and Placebo at all visits Bray-Curtis only

pb<-c(0.97, 0.001,0.10) p.adjust(pb, method=, n=length(pb)) #[1] 0.970 0.003 0.200

#Baseline

rr newdat0<-read.csv(/t0fg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE) colnames(newdat0) str(newdat0)

Renaming factor levels dplyr

newdat0\(Group <- recode_factor(newdat0\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat0)

p values

rr pvla0 <- data.frame( group1 = \1, group2 = \3, label = *p = 0.76, y.position = 140 )

rr ba0<-ggplot(newdat0, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+mynamestheme+stat_pvalue_manual(pvla0, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba0

#Baseline - Bray-Curtis

rr newdat0b<-read.csv(/t0fg_bray1.csv.csv, stringsAsFactors = TRUE) colnames(newdat0b) str(newdat0b)

Renaming factor levels dplyr

newdat0b\(Group <- recode_factor(newdat0b\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat0b)

p values

rr pvla0b <- data.frame( group1 = \1, group2 = \3, label = *p = 0.97, y.position = 1.08 )

rr ba0b<-ggplot(newdat0b, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 1.2))+ labs( x=NULL, y=-Curtis distance)+mynamestheme+stat_pvalue_manual(pvla0b, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba0b

rr #Combine the two plots m1<-cowplot::plot_grid(ba0, ba0b, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m1

#Week 48

rr newdat12<-read.csv(/t12fg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE) colnames(newdat12) str(newdat12)

Renaming factor levels dplyr

newdat12\(Group <- recode_factor(newdat12\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat12)

p values

rr pvla12 <- data.frame( group1 = \1, group2 = \3, label = *p = 0.003, y.position = 135 )

rr ba12<-ggplot(newdat12, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+mynamestheme+stat_pvalue_manual(pvla12, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba12

#Week 48 - Bray-Curtis

rr newdat12b<-read.csv(/t12fg_bray1.csv.csv, stringsAsFactors = TRUE) colnames(newdat12b) str(newdat12b)

Renaming factor levels dplyr

newdat12b\(Group <- recode_factor(newdat12b\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat12b)

p values

rr pvla12b <- data.frame( group1 = \1, group2 = \3, label = *p = 0.003, y.position = 1.08 )

rr ba12b<-ggplot(newdat12b, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 1.2))+ labs( x=NULL, y=-Curtis distance)+mynamestheme+stat_pvalue_manual(pvla12b, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba12b

rr #Combine the two plots m12<-cowplot::plot_grid(ba12, ba12b, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m12

#Week 72

rr newdat2<-read.csv(/t18fg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE) colnames(newdat2) str(newdat2)

Renaming factor levels dplyr

newdat2\(Group <- recode_factor(newdat2\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat2)

p values

rr pvla <- data.frame( group1 = \1, group2 = \3, label = *p = 0.14, y.position = 135 )

rr ba18<-ggplot(newdat2, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+mynamestheme+stat_pvalue_manual(pvla, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba18

#Week 72- Bray-Curtis

rr newdat18b<-read.csv(/t18fg_bray1.csv.csv, stringsAsFactors = TRUE) colnames(newdat18b) str(newdat18b)

Renaming factor levels dplyr

newdat18b\(Group <- recode_factor(newdat18b\)Group, AZM= \1 , Placebo=\2, Bewtween_group_matrix = \3  ) str(newdat18b)

p values

rr pvla18b <- data.frame( group1 = \1, group2 = \3, label = *p = 0.20, y.position = 1.08 )

rr ba18b<-ggplot(newdat18b, aes(y=Values, x=Group, colour=Group)) + geom_violin(aes(fill=Group,colour=NULL))+geom_boxplot(aes(fill=Group, colour=NULL), width=.1, fill=, outlier.colour = )+coord_cartesian(ylim = c(0, 1.2))+ labs( x=NULL, y=-Curtis distance)+mynamestheme+stat_pvalue_manual(pvla18b, label = ,size = 7, tip.length = 0)+theme(legend.position = )+ scale_fill_manual(values=c(#A087BC, #FFF468, ))+ scale_x_discrete(labels=c(, , & Placebo)) ba18b

rr #Combine the two plots m18<-cowplot::plot_grid(ba18, ba18b, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m18

#Combine all- AZM and placebo

rr all<-cowplot::plot_grid(m1, m12, m18, nrow = 3, ncol = 1, scale = .8, vjust=c(2.0,1.2,1.2), hjust=c(-5.3,-5.5,-5.5), labels = c(, 48, 72), label_size = 30,label_fontfamily = ) all

ggsave(_all_labels13thDec2021.pdf, all, width = 50, height = 50, units = )

#P value correction for multiple testing AZM only

rr #P value correction #AZM at all visits Aitchison only

pa<-c(0.002, 0.002,0.56) p.adjust(pa, method=, n=length(pa)) #[1] 0.004 0.004 0.560

#P value correction #AZM at all visits Bray-Curtis only

pb<-c(0.001, 0.001,0.03) p.adjust(pb, method=, n=length(pb)) #[1] 0.002 0.002 0.030

#—AZM only—– #Baseline and 48 weeks

rr #—————AZM baseline and 48 weeks- Aitchison——————————- datazm012A<-read.csv(/azm012pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datazm012A)

[1] \Visit\  \Values\ \Arm\   

rr str(datazm012A)

'data.frame':   42486 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\12m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  54.5 43.1 31 38.7 30.7 ...
 $ Arm   : Factor w/ 1 level \AZM\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datazm012A)

                   Visit           Values         Arm       
 0m                   :10585   Min.   :  8.352   AZM:42486  
 12m                  :10585   1st Qu.: 33.959              
 Bewtween_group_matrix:21316   Median : 41.201              
                               Mean   : 43.597              
                               3rd Qu.: 50.644              
                               Max.   :126.538              

rr #Manually assigning p values pv012A <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.004, y.position = 128 )

#Figure bc012A<-ggplot(datazm012A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 140))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv012A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#E1D0FF, #8662BD, ))+ scale_x_discrete(labels=c(, 48, & Week 48))+ theme(legend.position = ) bc012A

rr

#Combine the two plots m012<-cowplot::plot_grid(bc012A, bc012, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m012

ggsave(012AZM_beta13thDec.pdf, m012, width = 40, height = 25, units = )

#Week 48 and 72- AZM only

rr

#scale_fill_manual(values=c(#E1D0FF, #8662BD, #46019B))

#—————–AZM 48 and 72 weeks-Bray-Curtis———————– datazm1218<-read.csv(/azm1218pfg_bray1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datazm1218)

[1] \Visit\  \Values\ \Arm\   

rr str(datazm1218)

'data.frame':   26796 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \12m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  0.427 0.322 0.462 0.338 0.775 ...
 $ Arm   : Factor w/ 1 level \AZM\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datazm1218)

                   Visit           Values         Arm       
 12m                  : 6670   Min.   :0.03149   AZM:26796  
 18m                  : 6670   1st Qu.:0.40606              
 Bewtween_group_matrix:13456   Median :0.50754              
                               Mean   :0.53163              
                               3rd Qu.:0.64083              
                               Max.   :0.99804              

rr #Manually assigning p values pv1218 <- data.frame( group1 = \12m, group2 = _group_matrix, label = *p = 0.002, y.position = 1.05 )

#Figure bc1218<-ggplot(datazm1218, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 1.15))+ labs( x=NULL, y=-Curtis distance)+ mynamestheme+ stat_pvalue_manual(pv1218, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#8662BD, #32224A, ))+ scale_x_discrete(labels=c(48, 72,48 & 72 ))+ theme(legend.position = ) bc1218

rr

#—————AZM 48 and 72 weeks- Aitchison——————————- datazm1218A<-read.csv(/azm1218pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datazm1218A)

[1] \Visit\  \Values\ \Arm\   

rr str(datazm1218A)

'data.frame':   26796 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \12m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  37.1 30.7 53.8 25.5 24.1 ...
 $ Arm   : Factor w/ 1 level \AZM\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datazm1218A)

                   Visit           Values        Arm       
 12m                  : 6670   Min.   :  9.24   AZM:26796  
 18m                  : 6670   1st Qu.: 33.72              
 Bewtween_group_matrix:13456   Median : 40.79              
                               Mean   : 42.88              
                               3rd Qu.: 49.86              
                               Max.   :117.11              

rr #Manually assigning p values pv1218A <- data.frame( group1 = \12m, group2 = _group_matrix, label = *p = 0.004, y.position = 128 )

#Figure bc1218A<-ggplot(datazm1218A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 140))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv1218A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#8662BD, #32224A, ))+ scale_x_discrete(labels=c(48, 72, 48 & 72))+ theme(legend.position = ) bc1218A

rr

#Combine the two plots m1218<-cowplot::plot_grid(bc1218A, bc1218, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m1218

ggsave(1218AZM_beta13thDec2021.pdf, m1218, width = 40, height = 25, units = )

rr NA NA NA

rr

#scale_fill_manual(values=c(#E1D0FF, #8662BD, #46019B))

#—————–AZM 48 and 72 weeks-Bray-Curtis———————– datazm018<-read.csv(/azm018pfg_bray1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datazm018)

[1] \Visit\  \Values\ \Arm\   

rr str(datazm018)

'data.frame':   26335 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  0.818 0.376 0.436 0.572 0.479 ...
 $ Arm   : Factor w/ 1 level \AZM\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datazm018)

                   Visit           Values         Arm       
 0m                   : 6555   Min.   :0.01698   AZM:26335  
 18m                  : 6555   1st Qu.:0.40672              
 Bewtween_group_matrix:13225   Median :0.52535              
                               Mean   :0.54428              
                               3rd Qu.:0.67601              
                               Max.   :0.99404              

rr #Manually assigning p values pv018 <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.03, y.position = 1.05 )

#Figure bc018<-ggplot(datazm018, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 1.15))+ labs( x=NULL, y=-Curtis distance)+ mynamestheme+ stat_pvalue_manual(pv018, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#E1D0FF, #32224A, ))+ scale_x_discrete(labels=c(, 72, & Week 72))+ theme(legend.position = ) bc018

rr

#—————AZM 48 and 72 weeks- Aitchison——————————- datazm018A<-read.csv(/azm018pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datazm018A)

[1] \Visit\  \Values\ \Arm\   

rr str(datazm018A)

'data.frame':   26335 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  52.1 22.4 29.3 50.2 54 ...
 $ Arm   : Factor w/ 1 level \AZM\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datazm018A)

                   Visit           Values         Arm       
 0m                   : 6555   Min.   :  9.529   AZM:26335  
 18m                  : 6555   1st Qu.: 33.216              
 Bewtween_group_matrix:13225   Median : 40.418              
                               Mean   : 42.936              
                               3rd Qu.: 49.553              
                               Max.   :123.869              

rr #Manually assigning p values pv018A <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.56, y.position = 128 )

#Figure bc018A<-ggplot(datazm018A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 140))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv018A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#E1D0FF, #32224A, ))+ scale_x_discrete(labels=c(, 72, & Week 72))+ theme(legend.position = ) bc018A

rr

#Combine the two plots m018<-cowplot::plot_grid(bc018A, bc018, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m018

ggsave(018AZM_beta13thDec2021.pdf, m018, width = 40, height = 25, units = )

rr NA NA

#Combine all- AZM only

rr all_azm<-cowplot::plot_grid(m012, m1218, m018, nrow = 3, ncol = 1, scale = .8, vjust=c(2.0,1.2,1.2), hjust=c(-1.5,-1.95,-1.5), labels = c(vs Week 48 (AZM), 48 vs 72 (AZM), vs Week 72 (AZM)), label_size = 30,label_fontfamily = ) all_azm

ggsave(_ONLY_all_labels13thDec.pdf, all_azm, width = 50, height = 50, units = )

#—Placebo only—– #P value correction for multiple testing Placebo only only

rr #P value correction #AZM at all visits Aitchison only

pa<-c(0.33, 0.70,0.17) p.adjust(pa, method=, n=length(pa)) #[1] 0.66 0.70 0.51

#P value correction #AZM at all visits Bray-Curtis only

pb<-c(0.51, 0.33,0.28) p.adjust(pb, method=, n=length(pb)) #[1] 0.51 0.51 0.51

#Baseline and 48 weeks

rr #Placebo only

Warning messages:
1: In readChar(file, size, TRUE) : truncating string with embedded nuls
2: In readChar(file, size, TRUE) : truncating string with embedded nuls
3: In readChar(file, size, TRUE) : truncating string with embedded nuls
4: In readChar(file, size, TRUE) : truncating string with embedded nuls
5: In readChar(file, size, TRUE) : truncating string with embedded nuls
6: In readChar(file, size, TRUE) : truncating string with embedded nuls
7: In readChar(file, size, TRUE) : truncating string with embedded nuls
8: In readChar(file, size, TRUE) : truncating string with embedded nuls
9: In readChar(file, size, TRUE) : truncating string with embedded nuls
10: In readChar(file, size, TRUE) : truncating string with embedded nuls

rr #scale_fill_manual(values=c(#fff9ae, #dab600, #46019B))

#—————–Placebo baseline and 48 weeks -Bray- Curtis———————– datPlacebo012<-read.csv(/Placebo012pfg_bray1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo012)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo012)

'data.frame':   40755 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\12m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  0.657 0.745 0.824 0.721 0.104 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo012)

                   Visit           Values             Arm       
 0m                   :10153   Min.   :0.01376   Placebo:40755  
 12m                  :10153   1st Qu.:0.42545                  
 Bewtween_group_matrix:20449   Median :0.55729                  
                               Mean   :0.57597                  
                               3rd Qu.:0.73477                  
                               Max.   :1.00000                  

rr #Manually assigning p values pv012 <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.51, y.position = 1.05 )

#Figure bc012<-ggplot(datPlacebo012, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 1.15))+ labs( x=NULL, y=-Curtis distance)+ mynamestheme+ stat_pvalue_manual(pv012, label = ,size = 7,tip.length = 0.0)+ scale_fill_manual(values=c(#fff9ae, #dab600, ))+ scale_x_discrete(labels=c(, 48, & Week 48))+ theme(legend.position = ) bc012

rr #—————Placebo baseline and 48 weeks- Aitchison——————————- datPlacebo012A<-read.csv(/Placebo012pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo012A)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo012A)

'data.frame':   40755 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\12m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  39.9 49 68.5 65.5 14.2 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo012A)

                   Visit           Values             Arm       
 0m                   :10153   Min.   :  6.017   Placebo:40755  
 12m                  :10153   1st Qu.: 34.710                  
 Bewtween_group_matrix:20449   Median : 42.894                  
                               Mean   : 45.421                  
                               3rd Qu.: 53.316                  
                               Max.   :133.657                  

rr #Manually assigning p values pv012A <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.66, y.position = 138 )

#Figure bc012A<-ggplot(datPlacebo012A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv012A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#fff9ae, #dab600, ))+ scale_x_discrete(labels=c(, 48, & Week 48))+ theme(legend.position = ) bc012A

rr

#Combine the two plots m012<-cowplot::plot_grid(bc012A, bc012, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m012

ggsave(012Placebo_beta13thDec2021.pdf, m012, width = 40, height = 25, units = )

#Week 48 and 72- Placebo only

rr

#scale_fill_manual(values=c(#fff9ae, #dab600, #46019B))

#—————–Placebo 48 and 72 weeks-Bray-Curtis———————– datPlacebo1218<-read.csv(/Placebo1218pfg_bray1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo1218)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo1218)

'data.frame':   24090 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \12m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  0.603 0.516 0.281 0.979 0.445 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo1218)

                   Visit           Values             Arm       
 12m                  : 5995   Min.   :0.01305   Placebo:24090  
 18m                  : 5995   1st Qu.:0.42965                  
 Bewtween_group_matrix:12100   Median :0.58323                  
                               Mean   :0.59007                  
                               3rd Qu.:0.75923                  
                               Max.   :1.00000                  

rr #Manually assigning p values pv1218 <- data.frame( group1 = \12m, group2 = _group_matrix, label = *p = 0.51, y.position = 1.05 )

#Figure bc1218<-ggplot(datPlacebo1218, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 1.15))+ labs( x=NULL, y=-Curtis distance)+ mynamestheme+ stat_pvalue_manual(pv1218, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#dab600, #554904, ))+ scale_x_discrete(labels=c(48, 72,48 & 72 ))+ theme(legend.position = ) bc1218

rr

#—————Placebo 48 and 72 weeks- Aitchison——————————- datPlacebo1218A<-read.csv(/Placebo1218pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo1218A)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo1218A)

'data.frame':   24090 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \12m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  34.9 35.7 41.1 61.8 37.5 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo1218A)

                   Visit           Values             Arm       
 12m                  : 5995   Min.   :  6.017   Placebo:24090  
 18m                  : 5995   1st Qu.: 33.316                  
 Bewtween_group_matrix:12100   Median : 40.742                  
                               Mean   : 42.860                  
                               3rd Qu.: 50.083                  
                               Max.   :117.128                  

rr #Manually assigning p values pv1218A <- data.frame( group1 = \12m, group2 = _group_matrix, label = *p = 0.70, y.position = 138 )

#Figure bc1218A<-ggplot(datPlacebo1218A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv1218A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#dab600, #554904, ))+ scale_x_discrete(labels=c(48, 72, 48 & 72))+ theme(legend.position = ) bc1218A

rr

#Combine the two plots m1218<-cowplot::plot_grid(bc1218A, bc1218, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m1218

ggsave(1218Placebo_beta13thDec2021.pdf, m1218, width = 40, height = 25, units = )

rr NA NA NA

rr

#scale_fill_manual(values=c(#fff9ae, #dab600, #46019B))

#—————–Placebo 48 and 72 weeks-Bray-Curtis———————– datPlacebo018<-read.csv(/Placebo018pfg_bray1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo018)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo018)

'data.frame':   24976 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  0.657 0.581 0.481 0.498 0.703 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo018)

                   Visit           Values             Arm       
 0m                   : 6216   Min.   :0.02508   Placebo:24976  
 18m                  : 6216   1st Qu.:0.43141                  
 Bewtween_group_matrix:12544   Median :0.56986                  
                               Mean   :0.57820                  
                               3rd Qu.:0.73365                  
                               Max.   :0.99906                  

rr #Manually assigning p values pv018 <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.51, y.position = 1.05 )

#Figure bc018<-ggplot(datPlacebo018, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 1.15))+ labs( x=NULL, y=-Curtis distance)+ mynamestheme+ stat_pvalue_manual(pv018, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#fff9ae, #554904, ))+ scale_x_discrete(labels=c(, 72, & Week 72))+ theme(legend.position = ) bc018

rr

#—————Placebo 48 and 72 weeks- Aitchison——————————- datPlacebo018A<-read.csv(/Placebo018pfg_CLR_euclidean1.csv.csv, stringsAsFactors = TRUE, row.names = 1) colnames(datPlacebo018A)

[1] \Visit\  \Values\ \Arm\   

rr str(datPlacebo018A)

'data.frame':   24976 obs. of  3 variables:
 $ Visit : Factor w/ 3 levels \0m\,\18m\,\Bewtween_group_matrix\: 1 1 1 1 1 1 1 1 1 1 ...
 $ Values: num  39.9 56.7 35.1 58 64.5 ...
 $ Arm   : Factor w/ 1 level \Placebo\: 1 1 1 1 1 1 1 1 1 1 ...

rr summary(datPlacebo018A)

                   Visit           Values             Arm       
 0m                   : 6216   Min.   :  6.911   Placebo:24976  
 18m                  : 6216   1st Qu.: 34.608                  
 Bewtween_group_matrix:12544   Median : 42.537                  
                               Mean   : 44.729                  
                               3rd Qu.: 52.378                  
                               Max.   :120.050                  

rr #Manually assigning p values pv018A <- data.frame( group1 = \0m, group2 = _group_matrix, label = *p = 0.51, y.position = 138 )

#Figure bc018A<-ggplot(datPlacebo018A, aes(y=Values, x=Visit, colour=Visit)) + geom_violin(aes(fill=Visit,colour=NULL))+ geom_boxplot(aes(fill=Visit, colour=NULL), width=.1, fill=, outlier.colour = )+ coord_cartesian(ylim = c(0, 150))+ labs( x=NULL, y=distance)+ mynamestheme+ stat_pvalue_manual(pv018A, label = ,size = 7, tip.length = 0.0)+ scale_fill_manual(values=c(#fff9ae, #554904, ))+ scale_x_discrete(labels=c(, 72, & Week 72))+ theme(legend.position = ) bc018A

rr

#Combine the two plots m018<-cowplot::plot_grid(bc018A, bc018, nrow = 1, ncol = 2, scale = .9, vjust=1.5, labels = c(, ), hjust =-0.9, label_size = 22, label_fontfamily = , label_fontface = , label_colour = blue) m018

ggsave(018Placebo_beta13thDec2021.pdf, m018, width = 40, height = 25, units = )

rr NA NA

#Combine all- Placebo only

rr all_Placebo<-cowplot::plot_grid(m012, m1218, m018, nrow = 3, ncol = 1, scale = .9, vjust=c(1.1,1.2,1.2), hjust=c(-1.25,-1.69,-1.25), labels = c(vs Week 48 (Placebo), 48 vs 72 (Placebo), vs Week 72 (Placebo)), label_size = 30,label_fontfamily = ) all_Placebo

ggsave(_ONLY_all_labels13thDec2021.pdf, all_Placebo, width = 50, height = 50, units = )

LS0tCnRpdGxlOiAiQmV0d2VlbiBncm91cCBiZXRhIGRpdmVyc2l0eSBwbG90cyIKb3V0cHV0OiBodG1sX25vdGVib29rCkF1dGhvcjogUmVnaW5hIEVzaW5hbSBBYm90c2ksIERlcGFydG1lbnQgb2YgTW9sZWN1bGFyIGFuZCBDZWxsIEJpb2xvZ3ksIFVuaXZlcnNpdHkgb2YgQ2FwZSBUb3duLCBTb3V0aCBBZnJpY2EuCi0tLQoKCgpgYGB7cn0KIyBMaWJyYXJpZXMKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGZvcmNhdHMpCmxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KGNvd3Bsb3QpCgpgYGAKCmBgYHtyfQpteW5hbWVzdGhlbWUgPC0gdGhlbWVfYncoKSsgCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiSGVsdmV0aWNhIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9ICgyNSkpLCAKICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3VyID0gImJsYWNrIiwgIGZhY2UgPSAiYm9sZCIsIGZhbWlseSA9ICJIZWx2ZXRpY2EiLHNpemUgPSAoMjApKSwgCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3VyPSJibGFjayIsZmFtaWx5ID0gIkhlbHZldGljYSIsc2l6ZSA9ICgxOCkgKSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBmYWNlID0gImJvbGQiLHNpemUgPSAoMjApLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkhlbHZldGljYSIsZmFjZSA9ICJib2xkIiwgY29sb3VyID0gImJsYWNrIiwgc2l6ZSA9ICgxOCkpKQpgYGAKCgoKYGBge3J9CiNQIHZhbHVlIGNvcnJlY3Rpb24KI0FaTSBhbmQgUGxhY2VibyBhdCBhbGwgdmlzaXRzIEFpdGNoaXNvbiBvbmx5IAoKcGE8LWMoMC43NiwgMC4wMDEsMC4wNykKcC5hZGp1c3QocGEsIG1ldGhvZD0iaG9jaGJlcmciLCBuPWxlbmd0aChwYSkpCiNbMV0gMC43NjAgMC4wMDMgMC4xNDAKCiNQIHZhbHVlIGNvcnJlY3Rpb24KI0FaTSBhbmQgUGxhY2VibyBhdCBhbGwgdmlzaXRzIEJyYXktQ3VydGlzIG9ubHkgCgpwYjwtYygwLjk3LCAwLjAwMSwwLjEwKQpwLmFkanVzdChwYiwgbWV0aG9kPSJob2NoYmVyZyIsIG49bGVuZ3RoKHBiKSkKI1sxXSAwLjk3MCAwLjAwMyAwLjIwMAoKCmBgYAoKCiNCYXNlbGluZQpgYGB7cn0KbmV3ZGF0MDwtcmVhZC5jc3YoImRhdGEvdDBmZ19DTFJfZXVjbGlkZWFuMS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpCmNvbG5hbWVzKG5ld2RhdDApCnN0cihuZXdkYXQwKQoKIyBSZW5hbWluZyBmYWN0b3IgbGV2ZWxzIGRwbHlyCm5ld2RhdDAkR3JvdXAgPC0gcmVjb2RlX2ZhY3RvcihuZXdkYXQwJEdyb3VwLCBBWk09ICIxIiAsIFBsYWNlYm89IjIiLCBCZXd0d2Vlbl9ncm91cF9tYXRyaXggPSAiMyIgICkKc3RyKG5ld2RhdDApCmBgYAoKCnAgdmFsdWVzCmBgYHtyfQpwdmxhMCA8LSBkYXRhLmZyYW1lKAogIGdyb3VwMSA9ICIxIiwKICBncm91cDIgPSAiMyIsCiAgbGFiZWwgPSAiKnAgPSAwLjc2IiwKICB5LnBvc2l0aW9uID0gMTQwCikKCmBgYAoKCmBgYHtyfQpiYTA8LWdncGxvdChuZXdkYXQwLCBhZXMoeT1WYWx1ZXMsIHg9R3JvdXAsIGNvbG91cj1Hcm91cCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9R3JvdXAsY29sb3VyPU5VTEwpKStnZW9tX2JveHBsb3QoYWVzKGZpbGw9R3JvdXAsIGNvbG91cj1OVUxMKSwgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKStjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMTUwKSkrCiAgbGFicyggeD1OVUxMLAogICAgICAgeT0iQWl0Y2hpc29uIGRpc3RhbmNlIikrbXluYW1lc3RoZW1lK3N0YXRfcHZhbHVlX21hbnVhbChwdmxhMCwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI0EwODdCQyIsICIjRkZGNDY4IiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkFaTSIsICJQbGFjZWJvIiwgIkFaTSAmIFBsYWNlYm8iKSkKYmEwCgpgYGAKCiNCYXNlbGluZSAtIEJyYXktQ3VydGlzCmBgYHtyfQpuZXdkYXQwYjwtcmVhZC5jc3YoImRhdGEvdDBmZ19icmF5MS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpCmNvbG5hbWVzKG5ld2RhdDBiKQpzdHIobmV3ZGF0MGIpCgojIFJlbmFtaW5nIGZhY3RvciBsZXZlbHMgZHBseXIKbmV3ZGF0MGIkR3JvdXAgPC0gcmVjb2RlX2ZhY3RvcihuZXdkYXQwYiRHcm91cCwgQVpNPSAiMSIgLCBQbGFjZWJvPSIyIiwgQmV3dHdlZW5fZ3JvdXBfbWF0cml4ID0gIjMiICApCnN0cihuZXdkYXQwYikKYGBgCgoKcCB2YWx1ZXMKYGBge3J9CnB2bGEwYiA8LSBkYXRhLmZyYW1lKAogIGdyb3VwMSA9ICIxIiwKICBncm91cDIgPSAiMyIsCiAgbGFiZWwgPSAiKnAgPSAwLjk3IiwKICB5LnBvc2l0aW9uID0gMS4wOAopCgpgYGAKCgpgYGB7cn0KYmEwYjwtZ2dwbG90KG5ld2RhdDBiLCBhZXMoeT1WYWx1ZXMsIHg9R3JvdXAsIGNvbG91cj1Hcm91cCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9R3JvdXAsY29sb3VyPU5VTEwpKStnZW9tX2JveHBsb3QoYWVzKGZpbGw9R3JvdXAsIGNvbG91cj1OVUxMKSwgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKStjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMS4yKSkrCiAgbGFicyggeD1OVUxMLAogICAgICAgeT0iQnJheS1DdXJ0aXMgZGlzdGFuY2UiKStteW5hbWVzdGhlbWUrc3RhdF9wdmFsdWVfbWFudWFsKHB2bGEwYiwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI0EwODdCQyIsICIjRkZGNDY4IiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkFaTSIsICJQbGFjZWJvIiwgIkFaTSAmIFBsYWNlYm8iKSkKYmEwYgoKYGBgCgpgYGB7cn0KI0NvbWJpbmUgdGhlIHR3byBwbG90cwptMTwtY293cGxvdDo6cGxvdF9ncmlkKGJhMCwgYmEwYiwgbnJvdyA9IDEsIG5jb2wgPSAyLCBzY2FsZSA9IC45LCB2anVzdD0xLjUsIGxhYmVscyA9IGMoIkEiLCAiQiIpLCBoanVzdCA9LTAuOSwgIGxhYmVsX3NpemUgPSAyMiwgbGFiZWxfZm9udGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBsYWJlbF9mb250ZmFjZSA9ICJib2xkIiwgbGFiZWxfY29sb3VyID0gImRhcmsgYmx1ZSIpCm0xCmBgYAoKCgoKCgojV2VlayA0OApgYGB7cn0KbmV3ZGF0MTI8LXJlYWQuY3N2KCJkYXRhL3QxMmZnX0NMUl9ldWNsaWRlYW4xLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSkKY29sbmFtZXMobmV3ZGF0MTIpCnN0cihuZXdkYXQxMikKCiMgUmVuYW1pbmcgZmFjdG9yIGxldmVscyBkcGx5cgpuZXdkYXQxMiRHcm91cCA8LSByZWNvZGVfZmFjdG9yKG5ld2RhdDEyJEdyb3VwLCBBWk09ICIxIiAsIFBsYWNlYm89IjIiLCBCZXd0d2Vlbl9ncm91cF9tYXRyaXggPSAiMyIgICkKc3RyKG5ld2RhdDEyKQpgYGAKCgpwIHZhbHVlcwpgYGB7cn0KcHZsYTEyIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjEiLAogIGdyb3VwMiA9ICIzIiwKICBsYWJlbCA9ICIqcCA9IDAuMDAzIiwKICB5LnBvc2l0aW9uID0gMTM1CikKCmBgYAoKCmBgYHtyfQpiYTEyPC1nZ3Bsb3QobmV3ZGF0MTIsIGFlcyh5PVZhbHVlcywgeD1Hcm91cCwgY29sb3VyPUdyb3VwKSkgKyAKICBnZW9tX3Zpb2xpbihhZXMoZmlsbD1Hcm91cCxjb2xvdXI9TlVMTCkpK2dlb21fYm94cGxvdChhZXMoZmlsbD1Hcm91cCwgY29sb3VyPU5VTEwpLCB3aWR0aD0uMSwgZmlsbD0id2hpdGUiLCBvdXRsaWVyLmNvbG91ciA9ICJibGFjayIpK2Nvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxNTApKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICB5PSJBaXRjaGlzb24gZGlzdGFuY2UiKStteW5hbWVzdGhlbWUrc3RhdF9wdmFsdWVfbWFudWFsKHB2bGExMiwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMCkrdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI0EwODdCQyIsICIjRkZGNDY4IiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkFaTSIsICJQbGFjZWJvIiwgIkFaTSAmIFBsYWNlYm8iKSkKYmExMgoKYGBgCgoKCiNXZWVrIDQ4IC0gQnJheS1DdXJ0aXMKYGBge3J9Cm5ld2RhdDEyYjwtcmVhZC5jc3YoImRhdGEvdDEyZmdfYnJheTEuY3N2LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFKQpjb2xuYW1lcyhuZXdkYXQxMmIpCnN0cihuZXdkYXQxMmIpCgojIFJlbmFtaW5nIGZhY3RvciBsZXZlbHMgZHBseXIKbmV3ZGF0MTJiJEdyb3VwIDwtIHJlY29kZV9mYWN0b3IobmV3ZGF0MTJiJEdyb3VwLCBBWk09ICIxIiAsIFBsYWNlYm89IjIiLCBCZXd0d2Vlbl9ncm91cF9tYXRyaXggPSAiMyIgICkKc3RyKG5ld2RhdDEyYikKYGBgCgoKcCB2YWx1ZXMKYGBge3J9CnB2bGExMmIgPC0gZGF0YS5mcmFtZSgKICBncm91cDEgPSAiMSIsCiAgZ3JvdXAyID0gIjMiLAogIGxhYmVsID0gIipwID0gMC4wMDMiLAogIHkucG9zaXRpb24gPSAxLjA4CikKCmBgYAoKCmBgYHtyfQpiYTEyYjwtZ2dwbG90KG5ld2RhdDEyYiwgYWVzKHk9VmFsdWVzLCB4PUdyb3VwLCBjb2xvdXI9R3JvdXApKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPUdyb3VwLGNvbG91cj1OVUxMKSkrZ2VvbV9ib3hwbG90KGFlcyhmaWxsPUdyb3VwLCBjb2xvdXI9TlVMTCksIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEuMikpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgIHk9IkJyYXktQ3VydGlzIGRpc3RhbmNlIikrbXluYW1lc3RoZW1lK3N0YXRfcHZhbHVlX21hbnVhbChwdmxhMTJiLCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsIHRpcC5sZW5ndGggPSAwKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjQTA4N0JDIiwgIiNGRkY0NjgiLCAid2hpdGUiKSkrCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiQVpNIiwgIlBsYWNlYm8iLCAiQVpNICYgUGxhY2VibyIpKQpiYTEyYgoKYGBgCgpgYGB7cn0KI0NvbWJpbmUgdGhlIHR3byBwbG90cwptMTI8LWNvd3Bsb3Q6OnBsb3RfZ3JpZChiYTEyLCBiYTEyYiwgbnJvdyA9IDEsIG5jb2wgPSAyLCBzY2FsZSA9IC45LCB2anVzdD0xLjUsIGxhYmVscyA9IGMoIkMiLCAiRCIpLCBoanVzdCA9LTAuOSwgIGxhYmVsX3NpemUgPSAyMiwgbGFiZWxfZm9udGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBsYWJlbF9mb250ZmFjZSA9ICJib2xkIiwgbGFiZWxfY29sb3VyID0gImRhcmsgYmx1ZSIpCm0xMgpgYGAKCgoKI1dlZWsgNzIKCmBgYHtyfQpuZXdkYXQyPC1yZWFkLmNzdigiZGF0YS90MThmZ19DTFJfZXVjbGlkZWFuMS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpCmNvbG5hbWVzKG5ld2RhdDIpCnN0cihuZXdkYXQyKQoKIyBSZW5hbWluZyBmYWN0b3IgbGV2ZWxzIGRwbHlyCm5ld2RhdDIkR3JvdXAgPC0gcmVjb2RlX2ZhY3RvcihuZXdkYXQyJEdyb3VwLCBBWk09ICIxIiAsIFBsYWNlYm89IjIiLCBCZXd0d2Vlbl9ncm91cF9tYXRyaXggPSAiMyIgICkKc3RyKG5ld2RhdDIpCmBgYAoKCnAgdmFsdWVzCmBgYHtyfQpwdmxhIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjEiLAogIGdyb3VwMiA9ICIzIiwKICBsYWJlbCA9ICIqcCA9IDAuMTQiLAogIHkucG9zaXRpb24gPSAxMzUKKQoKYGBgCgoKYGBge3J9CmJhMTg8LWdncGxvdChuZXdkYXQyLCBhZXMoeT1WYWx1ZXMsIHg9R3JvdXAsIGNvbG91cj1Hcm91cCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9R3JvdXAsY29sb3VyPU5VTEwpKStnZW9tX2JveHBsb3QoYWVzKGZpbGw9R3JvdXAsIGNvbG91cj1OVUxMKSwgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKStjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMTUwKSkrCiAgbGFicyggeD1OVUxMLAogICAgICAgeT0iQWl0Y2hpc29uIGRpc3RhbmNlIikrbXluYW1lc3RoZW1lK3N0YXRfcHZhbHVlX21hbnVhbChwdmxhLCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsIHRpcC5sZW5ndGggPSAwKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjQTA4N0JDIiwgIiNGRkY0NjgiLCAid2hpdGUiKSkrCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiQVpNIiwgIlBsYWNlYm8iLCAiQVpNICYgUGxhY2VibyIpKQpiYTE4CgpgYGAKCgoKI1dlZWsgNzItIEJyYXktQ3VydGlzCmBgYHtyfQpuZXdkYXQxOGI8LXJlYWQuY3N2KCJkYXRhL3QxOGZnX2JyYXkxLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSkKY29sbmFtZXMobmV3ZGF0MThiKQpzdHIobmV3ZGF0MThiKQoKIyBSZW5hbWluZyBmYWN0b3IgbGV2ZWxzIGRwbHlyCm5ld2RhdDE4YiRHcm91cCA8LSByZWNvZGVfZmFjdG9yKG5ld2RhdDE4YiRHcm91cCwgQVpNPSAiMSIgLCBQbGFjZWJvPSIyIiwgQmV3dHdlZW5fZ3JvdXBfbWF0cml4ID0gIjMiICApCnN0cihuZXdkYXQxOGIpCmBgYAoKCnAgdmFsdWVzCmBgYHtyfQpwdmxhMThiIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjEiLAogIGdyb3VwMiA9ICIzIiwKICBsYWJlbCA9ICIqcCA9IDAuMjAiLAogIHkucG9zaXRpb24gPSAxLjA4CikKCmBgYAoKCmBgYHtyfQpiYTE4YjwtZ2dwbG90KG5ld2RhdDE4YiwgYWVzKHk9VmFsdWVzLCB4PUdyb3VwLCBjb2xvdXI9R3JvdXApKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPUdyb3VwLGNvbG91cj1OVUxMKSkrZ2VvbV9ib3hwbG90KGFlcyhmaWxsPUdyb3VwLCBjb2xvdXI9TlVMTCksIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEuMikpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgIHk9IkJyYXktQ3VydGlzIGRpc3RhbmNlIikrbXluYW1lc3RoZW1lK3N0YXRfcHZhbHVlX21hbnVhbChwdmxhMThiLCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsIHRpcC5sZW5ndGggPSAwKSt0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjQTA4N0JDIiwgIiNGRkY0NjgiLCAid2hpdGUiKSkrCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiQVpNIiwgIlBsYWNlYm8iLCAiQVpNICYgUGxhY2VibyIpKQpiYTE4YgoKYGBgCmBgYHtyfQojQ29tYmluZSB0aGUgdHdvIHBsb3RzCm0xODwtY293cGxvdDo6cGxvdF9ncmlkKGJhMTgsIGJhMThiLCBucm93ID0gMSwgbmNvbCA9IDIsIHNjYWxlID0gLjksIHZqdXN0PTEuNSwgbGFiZWxzID0gYygiRSIsICJGIiksIGhqdXN0ID0tMC45LCAgbGFiZWxfc2l6ZSA9IDIyLCBsYWJlbF9mb250ZmFtaWx5ID0gIkhlbHZldGljYSIsIGxhYmVsX2ZvbnRmYWNlID0gImJvbGQiLCBsYWJlbF9jb2xvdXIgPSAiZGFyayBibHVlIikKbTE4CmBgYAoKCiNDb21iaW5lIGFsbC0gQVpNIGFuZCBwbGFjZWJvCgpgYGB7cn0KYWxsPC1jb3dwbG90OjpwbG90X2dyaWQobTEsIG0xMiwgbTE4LCBucm93ID0gMywgbmNvbCA9IDEsIHNjYWxlID0gLjgsIHZqdXN0PWMoMi4wLDEuMiwxLjIpLCBoanVzdD1jKC01LjMsLTUuNSwtNS41KSwgbGFiZWxzID0gYygiQmFzZWxpbmUiLCAiV2VlayA0OCIsICJXZWVrIDcyIiksIGxhYmVsX3NpemUgPSAzMCxsYWJlbF9mb250ZmFtaWx5ID0gIkhlbHZldGljYSIpCmFsbAoKCmdnc2F2ZSgiQm90aF9hbGxfbGFiZWxzMTN0aERlYzIwMjEucGRmIiwgYWxsLCAgd2lkdGggPSA1MCwgaGVpZ2h0ID0gNTAsIHVuaXRzID0gImNtIikKYGBgCgoKCgoKCgojUCB2YWx1ZSBjb3JyZWN0aW9uIGZvciBtdWx0aXBsZSB0ZXN0aW5nIEFaTSBvbmx5CgpgYGB7cn0KI1AgdmFsdWUgY29ycmVjdGlvbgojQVpNIGF0IGFsbCB2aXNpdHMgQWl0Y2hpc29uIG9ubHkgCgpwYTwtYygwLjAwMiwgMC4wMDIsMC41NikKcC5hZGp1c3QocGEsIG1ldGhvZD0iaG9jaGJlcmciLCBuPWxlbmd0aChwYSkpCiNbMV0gMC4wMDQgMC4wMDQgMC41NjAKCiNQIHZhbHVlIGNvcnJlY3Rpb24KI0FaTSBhdCBhbGwgdmlzaXRzIEJyYXktQ3VydGlzIG9ubHkgCgpwYjwtYygwLjAwMSwgMC4wMDEsMC4wMykKcC5hZGp1c3QocGIsIG1ldGhvZD0iaG9jaGJlcmciLCBuPWxlbmd0aChwYikpCiNbMV0gMC4wMDIgMC4wMDIgMC4wMzAKCgoKCmBgYAoKIy0tLUFaTSBvbmx5LS0tLS0KI0Jhc2VsaW5lIGFuZCA0OCB3ZWVrcwoKYGBge3J9CiNBWk0gb25seQoKCiNzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI2IzY2RlMyIsICIjRUU4MkVFIiwgIiM0NjAxOUIiKSkKCiMtLS0tLS0tLS0tLS0tLS0tLUFaTSBiYXNlbGluZSBhbmQgNDggd2Vla3MgLUJyYXktIEN1cnRpcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRhdGF6bTAxMjwtcmVhZC5jc3YoImRhdGEvYXptMDEycGZnX2JyYXkxLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgcm93Lm5hbWVzID0gMSkKY29sbmFtZXMoZGF0YXptMDEyKQpzdHIoZGF0YXptMDEyKQpzdW1tYXJ5KGRhdGF6bTAxMikKCgojTWFudWFsbHkgYXNzaWduaW5nIHAgdmFsdWVzCnB2MDEyIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjBtIiwKICBncm91cDIgPSAiQmV3dHdlZW5fZ3JvdXBfbWF0cml4IiwKICBsYWJlbCA9ICIqcCA9IDAuMDAyIiwKICB5LnBvc2l0aW9uID0gMS4wNQopCgojRmlndXJlCmJjMDEyPC1nZ3Bsb3QoZGF0YXptMDEyLCBhZXMoeT1WYWx1ZXMsIHg9VmlzaXQsIGNvbG91cj1WaXNpdCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9VmlzaXQsY29sb3VyPU5VTEwpKSsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGw9VmlzaXQsIGNvbG91cj1OVUxMKSwgCiAgICAgICAgICAgICAgIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEuMTUpKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQnJheS1DdXJ0aXMgZGlzdGFuY2UiKSsKICBteW5hbWVzdGhlbWUrCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB2MDEyLCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsdGlwLmxlbmd0aCA9IDAuMCkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiNFMUQwRkYiLCAiIzg2NjJCRCIsICJ3aGl0ZSIpKSsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJCYXNlbGluZSIsICJXZWVrIDQ4IiwgIkJhc2VsaW5lICYgV2VlayA0OCIpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpCmJjMDEyCmBgYAoKCmBgYHtyfQojLS0tLS0tLS0tLS0tLS0tQVpNIGJhc2VsaW5lIGFuZCA0OCB3ZWVrcy0gQWl0Y2hpc29uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRhem0wMTJBPC1yZWFkLmNzdigiZGF0YS9hem0wMTJwZmdfQ0xSX2V1Y2xpZGVhbjEuY3N2LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFLCByb3cubmFtZXMgPSAxKQpjb2xuYW1lcyhkYXRhem0wMTJBKQpzdHIoZGF0YXptMDEyQSkKc3VtbWFyeShkYXRhem0wMTJBKQoKCiNNYW51YWxseSBhc3NpZ25pbmcgcCB2YWx1ZXMKcHYwMTJBIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjBtIiwKICBncm91cDIgPSAiQmV3dHdlZW5fZ3JvdXBfbWF0cml4IiwKICBsYWJlbCA9ICIqcCA9IDAuMDA0IiwKICB5LnBvc2l0aW9uID0gMTI4CikKCiNGaWd1cmUKYmMwMTJBPC1nZ3Bsb3QoZGF0YXptMDEyQSwgYWVzKHk9VmFsdWVzLCB4PVZpc2l0LCBjb2xvdXI9VmlzaXQpKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPVZpc2l0LGNvbG91cj1OVUxMKSkrCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsPVZpc2l0LCBjb2xvdXI9TlVMTCksIAogICAgICAgICAgICAgICB3aWR0aD0uMSwgZmlsbD0id2hpdGUiLCBvdXRsaWVyLmNvbG91ciA9ICJibGFjayIpKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxNDApKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQWl0Y2hpc29uIGRpc3RhbmNlIikrCiAgbXluYW1lc3RoZW1lKwogIHN0YXRfcHZhbHVlX21hbnVhbChwdjAxMkEsIGxhYmVsID0gImxhYmVsIixzaXplID0gNywgdGlwLmxlbmd0aCA9IDAuMCkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiNFMUQwRkYiLCAiIzg2NjJCRCIsICJ3aGl0ZSIpKSsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJCYXNlbGluZSIsICJXZWVrIDQ4IiwgIkJhc2VsaW5lICYgV2VlayA0OCIpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpCmJjMDEyQQoKCiNDb21iaW5lIHRoZSB0d28gcGxvdHMKbTAxMjwtY293cGxvdDo6cGxvdF9ncmlkKGJjMDEyQSwgYmMwMTIsIG5yb3cgPSAxLCBuY29sID0gMiwgc2NhbGUgPSAuOSwgdmp1c3Q9MS41LCBsYWJlbHMgPSBjKCJBIiwgIkIiKSwgaGp1c3QgPS0wLjksICBsYWJlbF9zaXplID0gMjIsIGxhYmVsX2ZvbnRmYW1pbHkgPSAiSGVsdmV0aWNhIiwgbGFiZWxfZm9udGZhY2UgPSAiYm9sZCIsIGxhYmVsX2NvbG91ciA9ICJkYXJrIGJsdWUiKQptMDEyCgpnZ3NhdmUoIk1vbnRoMDEyQVpNX2JldGExM3RoRGVjLnBkZiIsIG0wMTIsICB3aWR0aCA9IDQwLCBoZWlnaHQgPSAyNSwgdW5pdHMgPSAiY20iKQoKYGBgCgoKI1dlZWsgNDggYW5kIDcyLSBBWk0gb25seQpgYGB7cn0KCiNzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI0UxRDBGRiIsICIjODY2MkJEIiwgIiM0NjAxOUIiKSkKCiMtLS0tLS0tLS0tLS0tLS0tLUFaTSA0OCBhbmQgNzIgd2Vla3MtQnJheS1DdXJ0aXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRhem0xMjE4PC1yZWFkLmNzdigiZGF0YS9hem0xMjE4cGZnX2JyYXkxLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgcm93Lm5hbWVzID0gMSkKY29sbmFtZXMoZGF0YXptMTIxOCkKc3RyKGRhdGF6bTEyMTgpCnN1bW1hcnkoZGF0YXptMTIxOCkKCgojTWFudWFsbHkgYXNzaWduaW5nIHAgdmFsdWVzCnB2MTIxOCA8LSBkYXRhLmZyYW1lKAogIGdyb3VwMSA9ICIxMm0iLAogIGdyb3VwMiA9ICJCZXd0d2Vlbl9ncm91cF9tYXRyaXgiLAogIGxhYmVsID0gIipwID0gMC4wMDIiLAogIHkucG9zaXRpb24gPSAxLjA1CikKCiNGaWd1cmUKYmMxMjE4PC1nZ3Bsb3QoZGF0YXptMTIxOCwgYWVzKHk9VmFsdWVzLCB4PVZpc2l0LCBjb2xvdXI9VmlzaXQpKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPVZpc2l0LGNvbG91cj1OVUxMKSkrCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsPVZpc2l0LCBjb2xvdXI9TlVMTCksIAogICAgICAgICAgICAgICB3aWR0aD0uMSwgZmlsbD0id2hpdGUiLCBvdXRsaWVyLmNvbG91ciA9ICJibGFjayIpKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxLjE1KSkrCiAgbGFicyggeD1OVUxMLAogICAgICAgIHk9IkJyYXktQ3VydGlzIGRpc3RhbmNlIikrCiAgbXluYW1lc3RoZW1lKwogIHN0YXRfcHZhbHVlX21hbnVhbChwdjEyMTgsIGxhYmVsID0gImxhYmVsIixzaXplID0gNywgdGlwLmxlbmd0aCA9IDAuMCkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiM4NjYyQkQiLCAiIzMyMjI0QSIsICJ3aGl0ZSIpKSsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJXZWVrIDQ4IiwgIldlZWsgNzIiLCJXZWVrIDQ4ICYgNzIiICkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJOb25lIikKYmMxMjE4CgoKIy0tLS0tLS0tLS0tLS0tLUFaTSA0OCBhbmQgNzIgd2Vla3MtIEFpdGNoaXNvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGF0YXptMTIxOEE8LXJlYWQuY3N2KCJkYXRhL2F6bTEyMThwZmdfQ0xSX2V1Y2xpZGVhbjEuY3N2LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFLCByb3cubmFtZXMgPSAxKQpjb2xuYW1lcyhkYXRhem0xMjE4QSkKc3RyKGRhdGF6bTEyMThBKQpzdW1tYXJ5KGRhdGF6bTEyMThBKQoKCiNNYW51YWxseSBhc3NpZ25pbmcgcCB2YWx1ZXMKcHYxMjE4QSA8LSBkYXRhLmZyYW1lKAogIGdyb3VwMSA9ICIxMm0iLAogIGdyb3VwMiA9ICJCZXd0d2Vlbl9ncm91cF9tYXRyaXgiLAogIGxhYmVsID0gIipwID0gMC4wMDQiLAogIHkucG9zaXRpb24gPSAxMjgKKQoKI0ZpZ3VyZQpiYzEyMThBPC1nZ3Bsb3QoZGF0YXptMTIxOEEsIGFlcyh5PVZhbHVlcywgeD1WaXNpdCwgY29sb3VyPVZpc2l0KSkgKyAKICBnZW9tX3Zpb2xpbihhZXMoZmlsbD1WaXNpdCxjb2xvdXI9TlVMTCkpKwogIGdlb21fYm94cGxvdChhZXMoZmlsbD1WaXNpdCwgY29sb3VyPU5VTEwpLCAKICAgICAgICAgICAgICAgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMTQwKSkrCiAgbGFicyggeD1OVUxMLAogICAgICAgIHk9IkFpdGNoaXNvbiBkaXN0YW5jZSIpKwogIG15bmFtZXN0aGVtZSsKICBzdGF0X3B2YWx1ZV9tYW51YWwocHYxMjE4QSwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMC4wKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiIzg2NjJCRCIsICIjMzIyMjRBIiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIldlZWsgNDgiLCAiV2VlayA3MiIsICJXZWVrIDQ4ICYgNzIiKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKQpiYzEyMThBCgoKI0NvbWJpbmUgdGhlIHR3byBwbG90cwptMTIxODwtY293cGxvdDo6cGxvdF9ncmlkKGJjMTIxOEEsIGJjMTIxOCwgbnJvdyA9IDEsIG5jb2wgPSAyLCBzY2FsZSA9IC45LCB2anVzdD0xLjUsIGxhYmVscyA9IGMoIkMiLCAiRCIpLCBoanVzdCA9LTAuOSwgIGxhYmVsX3NpemUgPSAyMiwgbGFiZWxfZm9udGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBsYWJlbF9mb250ZmFjZSA9ICJib2xkIiwgbGFiZWxfY29sb3VyID0gImRhcmsgYmx1ZSIpCm0xMjE4CgpnZ3NhdmUoIk1vbnRoMTIxOEFaTV9iZXRhMTN0aERlYzIwMjEucGRmIiwgbTEyMTgsICB3aWR0aCA9IDQwLCBoZWlnaHQgPSAyNSwgdW5pdHMgPSAiY20iKQoKCgpgYGAKCmBgYHtyfQoKI3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjRTFEMEZGIiwgIiM4NjYyQkQiLCAiIzQ2MDE5QiIpKQoKIy0tLS0tLS0tLS0tLS0tLS0tQVpNIDQ4IGFuZCA3MiB3ZWVrcy1CcmF5LUN1cnRpcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRhdGF6bTAxODwtcmVhZC5jc3YoImRhdGEvYXptMDE4cGZnX2JyYXkxLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgcm93Lm5hbWVzID0gMSkKY29sbmFtZXMoZGF0YXptMDE4KQpzdHIoZGF0YXptMDE4KQpzdW1tYXJ5KGRhdGF6bTAxOCkKCgojTWFudWFsbHkgYXNzaWduaW5nIHAgdmFsdWVzCnB2MDE4IDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjBtIiwKICBncm91cDIgPSAiQmV3dHdlZW5fZ3JvdXBfbWF0cml4IiwKICBsYWJlbCA9ICIqcCA9IDAuMDMiLAogIHkucG9zaXRpb24gPSAxLjA1CikKCiNGaWd1cmUKYmMwMTg8LWdncGxvdChkYXRhem0wMTgsIGFlcyh5PVZhbHVlcywgeD1WaXNpdCwgY29sb3VyPVZpc2l0KSkgKyAKICBnZW9tX3Zpb2xpbihhZXMoZmlsbD1WaXNpdCxjb2xvdXI9TlVMTCkpKwogIGdlb21fYm94cGxvdChhZXMoZmlsbD1WaXNpdCwgY29sb3VyPU5VTEwpLCAKICAgICAgICAgICAgICAgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMS4xNSkpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgICB5PSJCcmF5LUN1cnRpcyBkaXN0YW5jZSIpKwogIG15bmFtZXN0aGVtZSsKICBzdGF0X3B2YWx1ZV9tYW51YWwocHYwMTgsIGxhYmVsID0gImxhYmVsIixzaXplID0gNywgdGlwLmxlbmd0aCA9IDAuMCkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiNFMUQwRkYiLCAiIzMyMjI0QSIsICJ3aGl0ZSIpKSsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJCYXNlbGluZSIsICJXZWVrIDcyIiwgIkJhc2VsaW5lICYgV2VlayA3MiIpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpCmJjMDE4CgoKIy0tLS0tLS0tLS0tLS0tLUFaTSA0OCBhbmQgNzIgd2Vla3MtIEFpdGNoaXNvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGF0YXptMDE4QTwtcmVhZC5jc3YoImRhdGEvYXptMDE4cGZnX0NMUl9ldWNsaWRlYW4xLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgcm93Lm5hbWVzID0gMSkKY29sbmFtZXMoZGF0YXptMDE4QSkKc3RyKGRhdGF6bTAxOEEpCnN1bW1hcnkoZGF0YXptMDE4QSkKCgojTWFudWFsbHkgYXNzaWduaW5nIHAgdmFsdWVzCnB2MDE4QSA8LSBkYXRhLmZyYW1lKAogIGdyb3VwMSA9ICIwbSIsCiAgZ3JvdXAyID0gIkJld3R3ZWVuX2dyb3VwX21hdHJpeCIsCiAgbGFiZWwgPSAiKnAgPSAwLjU2IiwKICB5LnBvc2l0aW9uID0gMTI4CikKCiNGaWd1cmUKYmMwMThBPC1nZ3Bsb3QoZGF0YXptMDE4QSwgYWVzKHk9VmFsdWVzLCB4PVZpc2l0LCBjb2xvdXI9VmlzaXQpKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPVZpc2l0LGNvbG91cj1OVUxMKSkrCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsPVZpc2l0LCBjb2xvdXI9TlVMTCksIAogICAgICAgICAgICAgICB3aWR0aD0uMSwgZmlsbD0id2hpdGUiLCBvdXRsaWVyLmNvbG91ciA9ICJibGFjayIpKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxNDApKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQWl0Y2hpc29uIGRpc3RhbmNlIikrCiAgbXluYW1lc3RoZW1lKwogIHN0YXRfcHZhbHVlX21hbnVhbChwdjAxOEEsIGxhYmVsID0gImxhYmVsIixzaXplID0gNywgdGlwLmxlbmd0aCA9IDAuMCkrCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPWMoIiNFMUQwRkYiLCAiIzMyMjI0QSIsICJ3aGl0ZSIpKSsKICBzY2FsZV94X2Rpc2NyZXRlKGxhYmVscz1jKCJCYXNlbGluZSIsICJXZWVrIDcyIiwgIkJhc2VsaW5lICYgV2VlayA3MiIpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpCmJjMDE4QQoKI0NvbWJpbmUgdGhlIHR3byBwbG90cwptMDE4PC1jb3dwbG90OjpwbG90X2dyaWQoYmMwMThBLCBiYzAxOCwgbnJvdyA9IDEsIG5jb2wgPSAyLCBzY2FsZSA9IC45LCB2anVzdD0xLjUsIGxhYmVscyA9IGMoIkUiLCAiRiIpLCBoanVzdCA9LTAuOSwgIGxhYmVsX3NpemUgPSAyMiwgbGFiZWxfZm9udGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBsYWJlbF9mb250ZmFjZSA9ICJib2xkIiwgbGFiZWxfY29sb3VyID0gImRhcmsgYmx1ZSIpCm0wMTgKCmdnc2F2ZSgiTW9udGgwMThBWk1fYmV0YTEzdGhEZWMyMDIxLnBkZiIsIG0wMTgsICB3aWR0aCA9IDQwLCBoZWlnaHQgPSAyNSwgdW5pdHMgPSAiY20iKQoKCmBgYAoKCiNDb21iaW5lIGFsbC0gQVpNIG9ubHkKCmBgYHtyfQphbGxfYXptPC1jb3dwbG90OjpwbG90X2dyaWQobTAxMiwgbTEyMTgsIG0wMTgsIG5yb3cgPSAzLCBuY29sID0gMSwgc2NhbGUgPSAuOCwgdmp1c3Q9YygyLjAsMS4yLDEuMiksIGhqdXN0PWMoLTEuNSwtMS45NSwtMS41KSwgbGFiZWxzID0gYygiQmFzZWxpbmUgdnMgV2VlayA0OCAoQVpNKSIsICJXZWVrIDQ4IHZzIDcyIChBWk0pIiwgIkJhc2VsaW5lIHZzIFdlZWsgNzIgKEFaTSkiKSwgbGFiZWxfc2l6ZSA9IDMwLGxhYmVsX2ZvbnRmYW1pbHkgPSAiSGVsdmV0aWNhIikKYWxsX2F6bQoKCmdnc2F2ZSgiQVpNX09OTFlfYWxsX2xhYmVsczEzdGhEZWMucGRmIiwgYWxsX2F6bSwgIHdpZHRoID0gNTAsIGhlaWdodCA9IDUwLCB1bml0cyA9ICJjbSIpCmBgYAoKCgoKIy0tLVBsYWNlYm8gb25seS0tLS0tCiNQIHZhbHVlIGNvcnJlY3Rpb24gZm9yIG11bHRpcGxlIHRlc3RpbmcgUGxhY2VibyBvbmx5IG9ubHkKCmBgYHtyfQojUCB2YWx1ZSBjb3JyZWN0aW9uCiNBWk0gYXQgYWxsIHZpc2l0cyBBaXRjaGlzb24gb25seSAKCnBhPC1jKDAuMzMsIDAuNzAsMC4xNykKcC5hZGp1c3QocGEsIG1ldGhvZD0iaG9jaGJlcmciLCBuPWxlbmd0aChwYSkpCiNbMV0gMC42NiAwLjcwIDAuNTEKCiNQIHZhbHVlIGNvcnJlY3Rpb24KI0FaTSBhdCBhbGwgdmlzaXRzIEJyYXktQ3VydGlzIG9ubHkgCgpwYjwtYygwLjUxLCAwLjMzLDAuMjgpCnAuYWRqdXN0KHBiLCBtZXRob2Q9ImhvY2hiZXJnIiwgbj1sZW5ndGgocGIpKQojWzFdIDAuNTEgMC41MSAwLjUxCgoKCgpgYGAKCiNCYXNlbGluZSBhbmQgNDggd2Vla3MKCmBgYHtyfQojUGxhY2VibyBvbmx5CgoKI3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjZmZmOWFlIiwgIiNkYWI2MDAiLCAiIzQ2MDE5QiIpKQoKIy0tLS0tLS0tLS0tLS0tLS0tUGxhY2VibyBiYXNlbGluZSBhbmQgNDggd2Vla3MgLUJyYXktIEN1cnRpcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRhdFBsYWNlYm8wMTI8LXJlYWQuY3N2KCJkYXRhL1BsYWNlYm8wMTJwZmdfYnJheTEuY3N2LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFLCByb3cubmFtZXMgPSAxKQpjb2xuYW1lcyhkYXRQbGFjZWJvMDEyKQpzdHIoZGF0UGxhY2VibzAxMikKc3VtbWFyeShkYXRQbGFjZWJvMDEyKQoKCiNNYW51YWxseSBhc3NpZ25pbmcgcCB2YWx1ZXMKcHYwMTIgPC0gZGF0YS5mcmFtZSgKICBncm91cDEgPSAiMG0iLAogIGdyb3VwMiA9ICJCZXd0d2Vlbl9ncm91cF9tYXRyaXgiLAogIGxhYmVsID0gIipwID0gMC41MSIsCiAgeS5wb3NpdGlvbiA9IDEuMDUKKQoKI0ZpZ3VyZQpiYzAxMjwtZ2dwbG90KGRhdFBsYWNlYm8wMTIsIGFlcyh5PVZhbHVlcywgeD1WaXNpdCwgY29sb3VyPVZpc2l0KSkgKyAKICBnZW9tX3Zpb2xpbihhZXMoZmlsbD1WaXNpdCxjb2xvdXI9TlVMTCkpKwogIGdlb21fYm94cGxvdChhZXMoZmlsbD1WaXNpdCwgY29sb3VyPU5VTEwpLCAKICAgICAgICAgICAgICAgd2lkdGg9LjEsIGZpbGw9IndoaXRlIiwgb3V0bGllci5jb2xvdXIgPSAiYmxhY2siKSsKICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMS4xNSkpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgICB5PSJCcmF5LUN1cnRpcyBkaXN0YW5jZSIpKwogIG15bmFtZXN0aGVtZSsKICBzdGF0X3B2YWx1ZV9tYW51YWwocHYwMTIsIGxhYmVsID0gImxhYmVsIixzaXplID0gNyx0aXAubGVuZ3RoID0gMC4wKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI2ZmZjlhZSIsICIjZGFiNjAwIiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkJhc2VsaW5lIiwgIldlZWsgNDgiLCAiQmFzZWxpbmUgJiBXZWVrIDQ4IikpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJOb25lIikKYmMwMTIKYGBgCgoKYGBge3J9CiMtLS0tLS0tLS0tLS0tLS1QbGFjZWJvIGJhc2VsaW5lIGFuZCA0OCB3ZWVrcy0gQWl0Y2hpc29uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRQbGFjZWJvMDEyQTwtcmVhZC5jc3YoImRhdGEvUGxhY2VibzAxMnBmZ19DTFJfZXVjbGlkZWFuMS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUsIHJvdy5uYW1lcyA9IDEpCmNvbG5hbWVzKGRhdFBsYWNlYm8wMTJBKQpzdHIoZGF0UGxhY2VibzAxMkEpCnN1bW1hcnkoZGF0UGxhY2VibzAxMkEpCgoKI01hbnVhbGx5IGFzc2lnbmluZyBwIHZhbHVlcwpwdjAxMkEgPC0gZGF0YS5mcmFtZSgKICBncm91cDEgPSAiMG0iLAogIGdyb3VwMiA9ICJCZXd0d2Vlbl9ncm91cF9tYXRyaXgiLAogIGxhYmVsID0gIipwID0gMC42NiIsCiAgeS5wb3NpdGlvbiA9IDEzOAopCgojRmlndXJlCmJjMDEyQTwtZ2dwbG90KGRhdFBsYWNlYm8wMTJBLCBhZXMoeT1WYWx1ZXMsIHg9VmlzaXQsIGNvbG91cj1WaXNpdCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9VmlzaXQsY29sb3VyPU5VTEwpKSsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGw9VmlzaXQsIGNvbG91cj1OVUxMKSwgCiAgICAgICAgICAgICAgIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDE1MCkpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgICB5PSJBaXRjaGlzb24gZGlzdGFuY2UiKSsKICBteW5hbWVzdGhlbWUrCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB2MDEyQSwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMC4wKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI2ZmZjlhZSIsICIjZGFiNjAwIiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkJhc2VsaW5lIiwgIldlZWsgNDgiLCAiQmFzZWxpbmUgJiBXZWVrIDQ4IikpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJOb25lIikKYmMwMTJBCgoKI0NvbWJpbmUgdGhlIHR3byBwbG90cwptMDEyPC1jb3dwbG90OjpwbG90X2dyaWQoYmMwMTJBLCBiYzAxMiwgbnJvdyA9IDEsIG5jb2wgPSAyLCBzY2FsZSA9IC45LCB2anVzdD0xLjUsIGxhYmVscyA9IGMoIkEiLCAiQiIpLCBoanVzdCA9LTAuOSwgIGxhYmVsX3NpemUgPSAyMiwgbGFiZWxfZm9udGZhbWlseSA9ICJIZWx2ZXRpY2EiLCBsYWJlbF9mb250ZmFjZSA9ICJib2xkIiwgbGFiZWxfY29sb3VyID0gImRhcmsgYmx1ZSIpCm0wMTIKCmdnc2F2ZSgiTW9udGgwMTJQbGFjZWJvX2JldGExM3RoRGVjMjAyMS5wZGYiLCBtMDEyLCAgd2lkdGggPSA0MCwgaGVpZ2h0ID0gMjUsIHVuaXRzID0gImNtIikKCmBgYAoKCiNXZWVrIDQ4IGFuZCA3Mi0gUGxhY2VibyBvbmx5CmBgYHtyfQoKI3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjZmZmOWFlIiwgIiNkYWI2MDAiLCAiIzQ2MDE5QiIpKQoKIy0tLS0tLS0tLS0tLS0tLS0tUGxhY2VibyA0OCBhbmQgNzIgd2Vla3MtQnJheS1DdXJ0aXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRQbGFjZWJvMTIxODwtcmVhZC5jc3YoImRhdGEvUGxhY2VibzEyMThwZmdfYnJheTEuY3N2LmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFLCByb3cubmFtZXMgPSAxKQpjb2xuYW1lcyhkYXRQbGFjZWJvMTIxOCkKc3RyKGRhdFBsYWNlYm8xMjE4KQpzdW1tYXJ5KGRhdFBsYWNlYm8xMjE4KQoKCiNNYW51YWxseSBhc3NpZ25pbmcgcCB2YWx1ZXMKcHYxMjE4IDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjEybSIsCiAgZ3JvdXAyID0gIkJld3R3ZWVuX2dyb3VwX21hdHJpeCIsCiAgbGFiZWwgPSAiKnAgPSAwLjUxIiwKICB5LnBvc2l0aW9uID0gMS4wNQopCgojRmlndXJlCmJjMTIxODwtZ2dwbG90KGRhdFBsYWNlYm8xMjE4LCBhZXMoeT1WYWx1ZXMsIHg9VmlzaXQsIGNvbG91cj1WaXNpdCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9VmlzaXQsY29sb3VyPU5VTEwpKSsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGw9VmlzaXQsIGNvbG91cj1OVUxMKSwgCiAgICAgICAgICAgICAgIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEuMTUpKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQnJheS1DdXJ0aXMgZGlzdGFuY2UiKSsKICBteW5hbWVzdGhlbWUrCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB2MTIxOCwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMC4wKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI2RhYjYwMCIsICIjNTU0OTA0IiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIldlZWsgNDgiLCAiV2VlayA3MiIsIldlZWsgNDggJiA3MiIgKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKQpiYzEyMTgKCgojLS0tLS0tLS0tLS0tLS0tUGxhY2VibyA0OCBhbmQgNzIgd2Vla3MtIEFpdGNoaXNvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGF0UGxhY2VibzEyMThBPC1yZWFkLmNzdigiZGF0YS9QbGFjZWJvMTIxOHBmZ19DTFJfZXVjbGlkZWFuMS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUsIHJvdy5uYW1lcyA9IDEpCmNvbG5hbWVzKGRhdFBsYWNlYm8xMjE4QSkKc3RyKGRhdFBsYWNlYm8xMjE4QSkKc3VtbWFyeShkYXRQbGFjZWJvMTIxOEEpCgoKI01hbnVhbGx5IGFzc2lnbmluZyBwIHZhbHVlcwpwdjEyMThBIDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjEybSIsCiAgZ3JvdXAyID0gIkJld3R3ZWVuX2dyb3VwX21hdHJpeCIsCiAgbGFiZWwgPSAiKnAgPSAwLjcwIiwKICB5LnBvc2l0aW9uID0gMTM4CikKCiNGaWd1cmUKYmMxMjE4QTwtZ2dwbG90KGRhdFBsYWNlYm8xMjE4QSwgYWVzKHk9VmFsdWVzLCB4PVZpc2l0LCBjb2xvdXI9VmlzaXQpKSArIAogIGdlb21fdmlvbGluKGFlcyhmaWxsPVZpc2l0LGNvbG91cj1OVUxMKSkrCiAgZ2VvbV9ib3hwbG90KGFlcyhmaWxsPVZpc2l0LCBjb2xvdXI9TlVMTCksIAogICAgICAgICAgICAgICB3aWR0aD0uMSwgZmlsbD0id2hpdGUiLCBvdXRsaWVyLmNvbG91ciA9ICJibGFjayIpKwogIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygwLCAxNTApKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQWl0Y2hpc29uIGRpc3RhbmNlIikrCiAgbXluYW1lc3RoZW1lKwogIHN0YXRfcHZhbHVlX21hbnVhbChwdjEyMThBLCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsIHRpcC5sZW5ndGggPSAwLjApKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjZGFiNjAwIiwgIiM1NTQ5MDQiLCAid2hpdGUiKSkrCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiV2VlayA0OCIsICJXZWVrIDcyIiwgIldlZWsgNDggJiA3MiIpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiTm9uZSIpCmJjMTIxOEEKCgojQ29tYmluZSB0aGUgdHdvIHBsb3RzCm0xMjE4PC1jb3dwbG90OjpwbG90X2dyaWQoYmMxMjE4QSwgYmMxMjE4LCBucm93ID0gMSwgbmNvbCA9IDIsIHNjYWxlID0gLjksIHZqdXN0PTEuNSwgbGFiZWxzID0gYygiQyIsICJEIiksIGhqdXN0ID0tMC45LCAgbGFiZWxfc2l6ZSA9IDIyLCBsYWJlbF9mb250ZmFtaWx5ID0gIkhlbHZldGljYSIsIGxhYmVsX2ZvbnRmYWNlID0gImJvbGQiLCBsYWJlbF9jb2xvdXIgPSAiZGFyayBibHVlIikKbTEyMTgKCmdnc2F2ZSgiTW9udGgxMjE4UGxhY2Vib19iZXRhMTN0aERlYzIwMjEucGRmIiwgbTEyMTgsICB3aWR0aCA9IDQwLCBoZWlnaHQgPSAyNSwgdW5pdHMgPSAiY20iKQoKCgpgYGAKCmBgYHtyfQoKI3NjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjZmZmOWFlIiwgIiNkYWI2MDAiLCAiIzQ2MDE5QiIpKQoKIy0tLS0tLS0tLS0tLS0tLS0tUGxhY2VibyA0OCBhbmQgNzIgd2Vla3MtQnJheS1DdXJ0aXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRQbGFjZWJvMDE4PC1yZWFkLmNzdigiZGF0YS9QbGFjZWJvMDE4cGZnX2JyYXkxLmNzdi5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSwgcm93Lm5hbWVzID0gMSkKY29sbmFtZXMoZGF0UGxhY2VibzAxOCkKc3RyKGRhdFBsYWNlYm8wMTgpCnN1bW1hcnkoZGF0UGxhY2VibzAxOCkKCgojTWFudWFsbHkgYXNzaWduaW5nIHAgdmFsdWVzCnB2MDE4IDwtIGRhdGEuZnJhbWUoCiAgZ3JvdXAxID0gIjBtIiwKICBncm91cDIgPSAiQmV3dHdlZW5fZ3JvdXBfbWF0cml4IiwKICBsYWJlbCA9ICIqcCA9IDAuNTEiLAogIHkucG9zaXRpb24gPSAxLjA1CikKCiNGaWd1cmUKYmMwMTg8LWdncGxvdChkYXRQbGFjZWJvMDE4LCBhZXMoeT1WYWx1ZXMsIHg9VmlzaXQsIGNvbG91cj1WaXNpdCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9VmlzaXQsY29sb3VyPU5VTEwpKSsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGw9VmlzaXQsIGNvbG91cj1OVUxMKSwgCiAgICAgICAgICAgICAgIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEuMTUpKSsKICBsYWJzKCB4PU5VTEwsCiAgICAgICAgeT0iQnJheS1DdXJ0aXMgZGlzdGFuY2UiKSsKICBteW5hbWVzdGhlbWUrCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB2MDE4LCBsYWJlbCA9ICJsYWJlbCIsc2l6ZSA9IDcsIHRpcC5sZW5ndGggPSAwLjApKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcz1jKCIjZmZmOWFlIiwgIiM1NTQ5MDQiLCAid2hpdGUiKSkrCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHM9YygiQmFzZWxpbmUiLCAiV2VlayA3MiIsICJCYXNlbGluZSAmIFdlZWsgNzIiKSkrCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIk5vbmUiKQpiYzAxOAoKCiMtLS0tLS0tLS0tLS0tLS1QbGFjZWJvIDQ4IGFuZCA3MiB3ZWVrcy0gQWl0Y2hpc29uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRQbGFjZWJvMDE4QTwtcmVhZC5jc3YoImRhdGEvUGxhY2VibzAxOHBmZ19DTFJfZXVjbGlkZWFuMS5jc3YuY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUsIHJvdy5uYW1lcyA9IDEpCmNvbG5hbWVzKGRhdFBsYWNlYm8wMThBKQpzdHIoZGF0UGxhY2VibzAxOEEpCnN1bW1hcnkoZGF0UGxhY2VibzAxOEEpCgoKI01hbnVhbGx5IGFzc2lnbmluZyBwIHZhbHVlcwpwdjAxOEEgPC0gZGF0YS5mcmFtZSgKICBncm91cDEgPSAiMG0iLAogIGdyb3VwMiA9ICJCZXd0d2Vlbl9ncm91cF9tYXRyaXgiLAogIGxhYmVsID0gIipwID0gMC41MSIsCiAgeS5wb3NpdGlvbiA9IDEzOAopCgojRmlndXJlCmJjMDE4QTwtZ2dwbG90KGRhdFBsYWNlYm8wMThBLCBhZXMoeT1WYWx1ZXMsIHg9VmlzaXQsIGNvbG91cj1WaXNpdCkpICsgCiAgZ2VvbV92aW9saW4oYWVzKGZpbGw9VmlzaXQsY29sb3VyPU5VTEwpKSsKICBnZW9tX2JveHBsb3QoYWVzKGZpbGw9VmlzaXQsIGNvbG91cj1OVUxMKSwgCiAgICAgICAgICAgICAgIHdpZHRoPS4xLCBmaWxsPSJ3aGl0ZSIsIG91dGxpZXIuY29sb3VyID0gImJsYWNrIikrCiAgY29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDE1MCkpKwogIGxhYnMoIHg9TlVMTCwKICAgICAgICB5PSJBaXRjaGlzb24gZGlzdGFuY2UiKSsKICBteW5hbWVzdGhlbWUrCiAgc3RhdF9wdmFsdWVfbWFudWFsKHB2MDE4QSwgbGFiZWwgPSAibGFiZWwiLHNpemUgPSA3LCB0aXAubGVuZ3RoID0gMC4wKSsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXM9YygiI2ZmZjlhZSIsICIjNTU0OTA0IiwgIndoaXRlIikpKwogIHNjYWxlX3hfZGlzY3JldGUobGFiZWxzPWMoIkJhc2VsaW5lIiwgIldlZWsgNzIiLCAiQmFzZWxpbmUgJiBXZWVrIDcyIikpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJOb25lIikKYmMwMThBCgojQ29tYmluZSB0aGUgdHdvIHBsb3RzCm0wMTg8LWNvd3Bsb3Q6OnBsb3RfZ3JpZChiYzAxOEEsIGJjMDE4LCBucm93ID0gMSwgbmNvbCA9IDIsIHNjYWxlID0gLjksIHZqdXN0PTEuNSwgbGFiZWxzID0gYygiRSIsICJGIiksIGhqdXN0ID0tMC45LCAgbGFiZWxfc2l6ZSA9IDIyLCBsYWJlbF9mb250ZmFtaWx5ID0gIkhlbHZldGljYSIsIGxhYmVsX2ZvbnRmYWNlID0gImJvbGQiLCBsYWJlbF9jb2xvdXIgPSAiZGFyayBibHVlIikKbTAxOAoKZ2dzYXZlKCJNb250aDAxOFBsYWNlYm9fYmV0YTEzdGhEZWMyMDIxLnBkZiIsIG0wMTgsICB3aWR0aCA9IDQwLCBoZWlnaHQgPSAyNSwgdW5pdHMgPSAiY20iKQoKCmBgYAoKCiNDb21iaW5lIGFsbC0gUGxhY2VibyBvbmx5CgpgYGB7cn0KYWxsX1BsYWNlYm88LWNvd3Bsb3Q6OnBsb3RfZ3JpZChtMDEyLCBtMTIxOCwgbTAxOCwgbnJvdyA9IDMsIG5jb2wgPSAxLCBzY2FsZSA9IC45LCB2anVzdD1jKDEuMSwxLjIsMS4yKSwgaGp1c3Q9YygtMS4yNSwtMS42OSwtMS4yNSksIGxhYmVscyA9IGMoIkJhc2VsaW5lIHZzIFdlZWsgNDggKFBsYWNlYm8pIiwgIldlZWsgNDggdnMgNzIgKFBsYWNlYm8pIiwgIkJhc2VsaW5lIHZzIFdlZWsgNzIgKFBsYWNlYm8pIiksIGxhYmVsX3NpemUgPSAzMCxsYWJlbF9mb250ZmFtaWx5ID0gIkhlbHZldGljYSIpCmFsbF9QbGFjZWJvCgoKZ2dzYXZlKCJQbGFjZWJvX09OTFlfYWxsX2xhYmVsczEzdGhEZWMyMDIxLnBkZiIsIGFsbF9QbGFjZWJvLCAgd2lkdGggPSA1MCwgaGVpZ2h0ID0gNTAsIHVuaXRzID0gImNtIikKYGBgCgoKCgoKCgoKCgoKCgoKCgo=